package JDBC;

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: ling
 * Date: 2022-07-20
 * Time: 15:11
 */
public class JDBCInsert {
    public static void main(String[] args) throws SQLException {
        // 1. 使用 DataSource 描述 MySQL 服务器的位置.
        DataSource dataSource=new MysqlDataSource();
        ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/practice?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("123456");
        // 2. 和数据库服务器建立连接~
        Connection connection = dataSource.getConnection();
        // 3. 构造 SQL 语句. JDBC 操作数据库, 本质仍然是通过 SQL 来描述数据库操作~~
        //    例如, 进行一个插入数据的操作.
        //    直接用 String 格式的 SQL 还不行, 还需要搭配一个 特殊的类.
        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入学号");
        int num=scanner.nextInt();
        System.out.println("请输入姓名");
        String name=scanner.next();
        //使用?作为占位符，后序使用statement对象针对?进行替换
        String sql="insert into student values(?,?)";
        PreparedStatement statement= connection.prepareStatement(sql);
        statement.setInt(1,num);
        statement.setString(2,name);

        // 4. 执行 SQL 语句, insert, update, delete 都是通过 executeUpdate 来执行的.
        //    select 则是通过 executeQuery 来执行的.
        //    executeUpdate 的返回值是一个 整数 表示这个操作影响到几行~
        int n=statement.executeUpdate();
        // 5. 断开连接, 释放资源
        statement.close();
        connection.close();
    }

}
